跳到主要内容

阿里云服务器

初始化配置

先进入实例控制台,修改实例名称及重制密码

打开控制台 通过ssh连接服务器

ssh root@114.55.60.11

输入密码后则登录成功,为了防止每次登录都要输入密码,可以将本机的publickey上传至远程机器中

ssh-copy-id root@114.55.60.11
  • 可以将远程机器的 ip 地址放到本机 hosts 中,方便登录
hosts 47.99.70.28 dev # 登录时可简写 ssh root@dev

如果要新增成员,可以进入~/.ssh 中,vi authorized_keys 编辑授权的key文件,在下方将新成员的 publickey 复制过来即可

配置应用环境

oh-my-zsh

sudo apt update
sudo apt install zsh

通常,zsh 的全局配置文件位于 /etc/zsh/zshrc。任何在这个文件中所做的修改将会影响到所有使用 zsh 的用户。你可以将 root 用户的个人 zsh 配置(通常是 .zshrc 文件在用户的 home 目录下)复制到该位置或者编辑 /etc/zsh/zshrc 来添加全局设置。

  • 设置为默认shell
sudo chsh -s /usr/bin/zsh

对于已有的用户,你可以使用 chsh 命令更改其默认的登录 shell。例如,要为用户名为 username 的用户设置 zsh 作为默认 shell,可以使用:

sudo chsh -s /usr/bin/zsh username

如果需要为新用户设置默认 shell,则可以在创建时指定,例如:

sudo adduser newuser --shell /usr/bin/zsh
  • 安装 oh-my-zsh
# If dont have curl
sudo apt install curl

# install oh-my-zsh
sudo sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# If you are not installing for root
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# uninstall
sudo sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/uninstall.sh)"

由于我们使用了 curl 而不是 apt 来安装,所以默认会安装到当前用户目录下,为了保证全局用户可用,需要将 .oh-my-zsh 移动至共享目录 /usr/share/.oh-my-zsh

# move to shared path
mv ~/.oh-my-zsh /usr/share/.oh-my-zsh
# 修改当前用户配置中的 ZSH 默认路径
vi ~/.zshrc
# export ZSH="$HOME/.oh-my-zsh"
export ZSH="/usr/share/.oh-my-zsh"
  • 安装插件
# Autosuggestions Plugin
# git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-autosuggestions /usr/share/.oh-my-zsh/custom/plugins/zsh-autosuggestions
# Syntax Highlighting Plugin
# git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git /usr/share/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting
  • 修改 zsh 全局配置。通常,zsh 的全局配置文件位于 /etc/zsh/zshrc。任何在这个文件中所做的修改将会影响到所有使用 zsh 的用户。用户的自定义配置项会覆盖这个配置
# add some custom config to /etc/zsh/zshrc
vi /etc/zsh/zshrc

# CUSTOM CONFIG
ZSH_THEME="random"
plugins=(
git
history
dirhistory
zsh-autosuggestions
zsh-syntax-highlighting
)

Docker

https://docs.docker.com/engine/install/ubuntu/

  • 常用命令
# 在 Docker 中,如果你想要移除所有未启动的容器(即状态为"created"或"exited"的容器),你可以使用以下命令:
docker container prune
# 如果你想要移除所有容器(无论状态如何),可以使用以下命令组合:
docker rm $(docker ps -aq)
# 如果你确定想要移除包括正在运行的容器在内的所有容器,你可以添加 -f 参数来强制移除:
docker rm -f $(docker ps -aq)
# 查看全部 images
docker image ls
# 根据 tag 删除某个 image
docker rmi ubuntu:latest
# 清理无用的 Docker 镜像和容器等数据
docker system prune

Nvm

https://github.com/nvm-sh/nvm?tab=readme-ov-file#install--update-script

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
nvm install --lts
  • 配置 npm 源
npm set registry http://registry.npmmirror.com
  • 配置环境变量
# nvm
export NVM_DIR="$HOME/.nvm"
# This loads nvm
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
# This loads nvm bash_completion
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

TODO:解决 node js 全局用户共享的方案

为应用创建单独的 user

root 用户仅用于环境配置(docker zsh),其他项目的部署与运维采用一个项目对应一个用户的策略

以 discord-clone 项目部署与运维为例

  1. 创建一个 discord_clone 用户,指定其默认 shell 为 oh-my-zsh。会在home下创建一个 discord_clone 文件夹
sudo adduser discord_clone --shell /usr/bin/zsh
  1. 把 zshrc 相关的配置复制到这个新用户下,否则新用户首次登录需重新配置
cp ~/.zshrc /home/discord_clone/.zshrc
# 更改文件所有者
sudo chown discord_clone:discord_clone /home/discord_clone/.zshrc
# 读 写 执行 的权限
sudo chmod 700 /home/discord_clone/.zshrc
  1. 将 publickey 也上传到这个新用户
ssh-copy-id discord_clone@114.55.60.11
  1. 切换登录用户
su - discord_clone
  1. 将新用户添加至 docker 分组中
usermod -a -G docker discord_clone

项目部署

数据库连接

创建 mysql 数据库容器

docker run --name discord-clone-my-sql -v /home/discord_clone/discord_clone_data/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=gsqzs123 -p 3306:3306 -d mysql:latest
# 进入容器 创建数据库
docker exec -it xxx bash
mysql -u root -p gsqzs123
create database discord_clone_db;

修改 prisma 连接字符串

DATABASE_URL="mysql://root:gsqzs123@localhost:3306/discord_clone_db?schema=public"

Pm2

计划有变,云服务器配置太低,每次构建镜像时执行 next build 都会卡死。。。。

所以使用 pm2 管理这个项目

npm install
npx prisma generate
npx prisma db push

常用命令

# install
npm install pm2 -g
# run next app
pm2 start npm --name "discord-clone-app" -- run start
# show status
pm2 status
# logs
pm2 logs my-next-app --lines 100
# auto start when the system start
pm2 startup
pm2 save
# restart stop delete app
pm2 stop my-next-app
pm2 restart my-next-app
pm2 delete my-next-app
# List the status of all application managed by PM2
pm2 [list|ls|status]
# visual monitor
pm2 monit

部署脚本

// TODO 正在调试
// 可能是系统架构有区别,以及服务器配置过低,在项目打包和部署上有很多细节需要调整
// 比如依赖缓存、webpack 与 nextjs 图片静态资源配置等

阿里云安全策略

  • 对公网开放 3000 端口
  • 配置安全组规则-配置规则-手动添加